perm filename SAILCT[901,BGB] blob
sn#129630 filedate 1974-11-12 generic text, type T, neo UTF8
00100 TITLE SAILCT - SAIL ACCESIBLE CART ROUTINES
00200 ;THERE ARE TWO ROUTINES: CART AND STCART. STCART STARTS UP CARCON
00300 ;AND CART SENDS COMMANDS.
00400 ;THE CALLING SEQUENCE FOR CART IS:
00500
00600 ; PUSH P,[DEV]
00700 ; PUSH P,[TIME]
00800 ;PUSH P,[ANGLE]
00900 ;PUSHJ P,CART
00950
01000 ;THE DEVICE NUMBERS,TIMES AND ANGLES ARE INTERPRETED AS GIVEN ON THE
01100 ;COMMENTS PAGE OF "CARCON",EXCEPT THAT PASSING A ZERO DEVICE NUMBER
01200 ;CAUSES ALL THE PREVIOUS COMMANDS TO BE MAILED TO THE CART CONTROLLER.
01300 ;NOTE THIS WELL! NOTHING IS SENT TO THE CART UNTIL THE STATEMENT
01400 ; "CART(0,#,#)" IS EXECUTED IN SAIL. (THE 2ND AND 3RD ARGUMENTS ARE IGNORED.
01450
01500 ;A THIRD ROUTINE IS INCLUDED FOR DEBUGGING AND GENERAL CON-
01600 ;VENIENCE. IT IS CALLED "PTYCTL",AND CONTAINS FACILITIES
01700 ;FOR TALKING TO THE PSEUDOTELETYPE SET UP BY STCART TO
01800 ;RUN CARCON. IF YOU GET INTO DDT AND SAY "PUSHJ P,PTYCTL$X"
01900 ;FROM THEN ON YOUR TTY WILL ACT AS IF IT WAS THE TTY RUNNING
02000 ;CARCON,WITH THE FOLLOWING KNOWN EXCEPTIONS:
02100 ; 1) IF YOU TYPE <ALT MODE> YOU WILL GET TWO OF THEM TYPED
02200 ; ALTHOUGH ONLY ONE GOES TO THE PROGRAM
02300 ; 2) LIKEWISE WITH <LINE FEED>
02400 ; 3) IF YOU WANT ↑C,TYPE ↑X INSTEAD, IT WILL ECHO AS ↑C
02500 ; A REAL ↑C WILL GO TO YOUR ORIGINAL JOB!
02600 ; 4) TO TERMINATE , TYPE ↑Y, AND YOU WILL GET BACK TO DDT IN
02700 ; YOUR ORIGINAL JOB
02800
02900 ;IF YOU CALL PTYCTL BEFORE STCART,THE PSEUDOTTY WILL NOT
03000 ;NOT HAVE BEEN SET UP, AND YOUR REAL TTY WILL BE USED.
03100 ;MANY STRANGE AND WONDERFUL EFFECTS WILL ENSUE
03200 ;DON'T DO THIS!!!
03300 ;AT LAST NOTE 5)<RUBOUT> WILL NOT GET TO YOUR PSEUDO TTY
03400 ;THROUGH PTYCTL, THIS IS A SYSTEM HACK WHICH WILL BE FIXED SOMEDAY
00100 Z←1
00200 TEMP←2
00300 ADR←3
00400 P←17
00500 INTERNAL CART,STCART,PTYCTL
00600 OPDEF TTYUUO [51B8]
00700 OPDEF PTYUUO [711B8]
00800 OPDEF MAIL [710B8]
00900 OPDEF ECHO [TTYUUO 3,]
01000 OPDEF SEND [MAIL 0,]
01100 OPDEF SKPHIM [MAIL 4,]
01200 OPDEF PTYGET [PTYUUO 0,]
01300 OPDEF PTYOUT [PTYUUO 11,]
01400 OPDEF PTYR1S [PTYUUO 4,]
01500 OPDEF PTYR1W [PTYUUO 5,]
01600 MADR:SIXBIT/CARCON/
01700 MBOX
01800 PADR: BLOCK 2
01900 MBOX: BLOCK 40
02000 MPTR: -1
02100 CART: SKIPN Z,-3(P)
02200 JRST MLOFF ;MAIL IT NOW
02300 MOVS TEMP,-2(P) ;GET TIME IN LEFT HALF
02400 LSH TEMP,3
02500 LSHC Z,-3 ;ASSEMBLE L.H.
02600 HRR TEMP,-1(P)
02700 MOVE Z,MPTR ;GET BUFFER POINTER
02800 PUSH Z,TEMP ;SEND IT OFF
02900 MOVEM Z,MPTR
03000 SUB P,[XWD 4,4]
03100 JRST @4(P)
03200 MLOFF: SETCM TEMP,MPTR ;GET WC-1
03300 SUB TEMP,[XWD 37,0]
03400 MOVEM TEMP,MBOX ;PUT -(WC+1) IN MBOX
03500 PUSHJ P,PTTY
03600 SEND MADR ;MAIL IT OFF
03700 JRST [ECHO [ASCIZ/CARCON NOT RUNNING
03800 /]↔CALLI 12]
03900 SKPHIM MADR ;DID HE GET IT
04000 JRST .+3 ;YES
04100 PUSHJ P,PTTY
04200 JRST .-3
04300 MOVE TEMP,[XWD -37,MBOX]
04400 MOVEM TEMP,MPTR ;RELOAD THE BUFFER POINTER
04500 SUB P,[XWD 4,4]
04600 JRST @4(P)
04700 PTTY: PTYR1S PADR
04800 POPJ P, ;NO∀HING HERE
04900 ECHO [ASCIZ/
05000 MESSAGE FROM CARCON - /]
05100 TTYUUO 1,PADR+1
05200 PTYR1S PADR
05300 POPJ P,
05400 JRST .-3
00100 STCART: PTYGET ADR ;ADR AND ADR+1 ARE ACCUMULATORS
00110 JRST [ECHO [ASCIZ /PTYGET FAILED, CAN'T START CARCON
00210 /]↔CALLI 12]
00250 MOVEM ADR,PADR
00300 MOVEI ADR+1,[ASCIZ/L
00400 /]
00500 PTYOUT ADR ;LOGIN
00525 PTYR1W ADR ;GET TYPEOUT
00550 CAIE ADR+1,"#" ;WAIT FOR "#"
00575 JRST .-2
00600 MOVEI ADR+1,[ASCIZ .C/ROD
00700 .]
00800 PTYOUT ADR ;PPPN
00825 PTYR1W ADR
00850 CAIE ADR+1,"." ;WAIT FOR MONITOR
00875 JRST .-2
00900 MOVEI ADR+1,[ASCIZ/RUN DSK CARCON
01000 /]
01100 PTYOUT ADR
01105 PTYR1W ADR
01110 CAIE ADR+1,"*"
01115 JRST .-2
01125 MOVE TEMP,[XWD -37,MBOX]
01175 MOVEM TEMP,MPTR
01200 POPJ P,
01300
00100 PTYCTL: PUSH P,ADR
00150 SETOM ADR
00200 TTYUUO 6,ADR ;GETLIN
00300 TLO ADR,404 ;INHIBIT DUPLEXING AND SET PTYWAKE
00400 TTYUUO 7,ADR ;SETLIN
00800 PTYC1: PTYR1S PADR
00850 JRST RLTTY
00900 SKIPN ADR,PADR+1 ;FROM PTY?
01000 JRST RLTTY ;NO
01100 TTYUUO 1,PADR+1 ;YES,ECHO IT TO REAL TTY
01200 JRST PTYC1
01300 RLTTY: TTYUUO 2,ADR ;GET CHARCTER
01350 JRST PTYC1 ;THERE WAS NO CHARCTER
01400 CAIN ADR,31 ;CONTROL Y?
01500 JRST PTYCO
01525 CAIN ADR,30 ;CONTROL X=↑C
01575 MOVEI ADR,3 ;PUT ↑C IN ADR
01600 MOVEM ADR,PADR+1
01700 PTYUUO 7,PADR ;OUTPUT TO PTY
01800 JRST PTYC1
01900 PTYCO: SETOM ADR ;RESET THE WORLD
02000 TTYUUO 6,ADR ;GETLIN
02100 TLZ ADR,404 ;ENABLE DUPLEXING
02200 TTYUUO 7,ADR ;SETLIN
02400 POP P,ADR
02500 POPJ P, ;RETURN
02600 END